#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""初始化模拟历史记录数据脚本

此脚本用于将前端mock数据写入数据库，确保应用在开发阶段有可用的测试数据。
"""

import os
import sys
from datetime import datetime, timedelta

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app import create_app
from app.extensions import db
from app.models.history import History
from app.models.user import User


def init_mock_history_data():
    """初始化模拟历史记录数据
    
    Returns:
        tuple: (成功插入的记录数, 总记录数)
    """
    # 创建应用实例
    app = create_app()
    
    with app.app_context():
        # 检查数据库连接
        try:
            from sqlalchemy import text
            db.session.execute(text('SELECT 1'))
            print("✓ 数据库连接正常")
        except Exception as e:
            print(f"✗ 数据库连接失败: {e}")
            return 0, 0
        
        # 获取或创建默认用户
        default_user = User.query.filter_by(username='admin').first()
        if not default_user:
            default_user = User(
                username='admin',
                email='admin@example.com',
                password_hash='mock_password_hash'
            )
            db.session.add(default_user)
            db.session.commit()
            print("✓ 创建默认用户")
        
        # 定义模拟历史记录数据（基于前端mock数据）
        mock_records = [
            {
                'title': '用户登录功能测试',
                'description': '测试用户登录流程，包括正确用户名密码、错误密码、忘记密码等场景',
                'status': 'completed',
                'type': 'normal',
                'timestamp': datetime.now(),
                'can_replay': True
            },
            {
                'title': 'API接口压力测试',
                'description': '对用户注册API进行压力测试，模拟并发用户访问',
                'status': 'pending',
                'type': 'normal',
                'timestamp': datetime.now() - timedelta(hours=1),
                'can_replay': True
            },
            {
                'title': '回归测试执行',
                'description': '执行历史测试用例回归，确保新功能不影响现有功能',
                'status': 'replay',
                'type': 'replay',
                'timestamp': datetime.now() - timedelta(hours=2),
                'can_replay': False
            },
            {
                'title': 'UI兼容性测试',
                'description': '测试应用在不同浏览器和设备上的兼容性表现',
                'status': 'completed',
                'type': 'normal',
                'timestamp': datetime.now() - timedelta(days=1),
                'can_replay': True
            },
            {
                'title': '性能基准测试',
                'description': '执行应用性能基准测试，评估系统响应时间',
                'status': 'failed',
                'type': 'normal',
                'timestamp': datetime.now() - timedelta(days=2),
                'can_replay': True
            }
        ]
        
        # 检查是否已存在数据
        existing_count = History.query.filter_by(user_id=default_user.id).count()
        if existing_count > 0:
            print(f"⚠ 数据库中已存在 {existing_count} 条历史记录，跳过初始化")
            return existing_count, len(mock_records)
        
        # 插入模拟数据
        inserted_count = 0
        for record_data in mock_records:
            try:
                history_record = History(
                    user_id=default_user.id,
                    title=record_data['title'],
                    description=record_data['description'],
                    status=record_data['status'],
                    type=record_data['type'],
                    timestamp=record_data['timestamp'],
                    can_replay=record_data['can_replay']
                )
                db.session.add(history_record)
                inserted_count += 1
                print(f"✓ 添加历史记录: {record_data['title']}")
            except Exception as e:
                print(f"✗ 添加历史记录失败: {record_data['title']} - {e}")
        
        # 提交事务
        try:
            db.session.commit()
            print(f"✓ 成功插入 {inserted_count} 条模拟历史记录")
        except Exception as e:
            db.session.rollback()
            print(f"✗ 提交事务失败: {e}")
            return 0, len(mock_records)
        
        return inserted_count, len(mock_records)


def main():
    """主函数
    
    执行模拟数据初始化流程。
    """
    print("=" * 60)
    print("初始化模拟历史记录数据")
    print("=" * 60)
    
    try:
        inserted_count, total_count = init_mock_history_data()
        
        print("-" * 60)
        if inserted_count > 0:
            print(f"✅ 初始化完成: 成功插入 {inserted_count}/{total_count} 条记录")
        else:
            print(f"ℹ️  初始化完成: 数据库已存在数据，无需重复插入")
        print("=" * 60)
        
    except Exception as e:
        print(f"❌ 初始化失败: {e}")
        print("=" * 60)
        sys.exit(1)


if __name__ == '__main__':
    main()